#include "wontec_485.h"
#include "string.h"
#include "stdio.h"
#include <sys/ipc.h>
#include <sys/msg.h>
#include "../msg_def.h"
#include "wontec_wt184.h"
#include <stdlib.h>

#define WONTEC_CMD_FILE "wontec_cmd.txt"

// int main(int argc, char * argv[])
// {
//     wontec_485_frame frameContent;
//     unsigned char data[20] = "name";

//     unsigned char lenRet;
//     unsigned char dataBuffRet[MAX_WT_BUFF_LEN];

//     frameContent.func_code = 0x58;
//     frameContent.slave_addrH = '0';
//     frameContent.slave_addrL = '1';

//     frameContent.dataLen = 0;

//     //memcpy(frameContent.data,data,4);

//     frameContent.data = data;

//     wontec_frame_serialize(&frameContent,dataBuffRet,&lenRet);


//     printf("lenOut:%d\n",lenRet);

//     dataBuffRet[lenRet] = '\0';
//     for(int i=0;i<lenRet;i++)
//     {
//         printf("%02x,",dataBuffRet[i]);
//     }

//     printf("\n");  


// }


// int main(int argc, char * argv[])
// {
//     FILE * fp = NULL;
//     wontec_queue_msg wtQueueMsg;
//     memset(&wtQueueMsg,0,sizeof(wontec_queue_msg));

//     if(argc<2)
//     {
//         fp = fopen(WONTEC_CMD_FILE,"r");       

//     }
//     else
//     {
//         fp = fopen(argv[1],"r");
//     }
//     if(fp!=NULL)
//     {
//         char StrLine[256];
//         char * tmpPtr = NULL;
//         while(!feof(fp))
//         {
//             memset(StrLine,0,256);
//             fgets(StrLine,256,fp);
//             if(strstr(StrLine,"func"))
//             {
//                 char funcCode = 0;
//                 tmpPtr = StrLine+5;
//                 funcCode = atoi(tmpPtr);
//                 wtQueueMsg.wontecMsg.funcCode = funcCode;
//             } 

//             if(strstr(StrLine,"sub_addr"))
//             {
//                 tmpPtr = StrLine+9;
//                 wtQueueMsg.wontecMsg.tarDev = atoi(tmpPtr);
//             }         

//         }
//     }

//     key_t key = ftok(msgQueueKeyPath, 0x1234);
//     if(key < 0)
//     {
//         perror("ftok");
//         printf("%s\n",msgQueueKeyPath);
//         return -1;
//     }

//     int msg_id = msgget(key, IPC_CREAT|0600);//IPC_CREAT|0600
//     if(msg_id < 0)
//     {
//         perror("msgget");
//         return -1;
//     }
  
    
    
//     wtQueueMsg.type = QUEUE_MSG_TYPE_RS485;

//     //wtQueueMsg.wontecMsg.tarDev = WONTEC_WT184;
//     //wtQueueMsg.wontecMsg.funcCode = RESET_ACTION;


//     if(msgsnd(msg_id, (void*)&wtQueueMsg, sizeof(wontec_msg_def), 0) < 0)
//     {
//         perror("msgsnd");
//         return -1;
//     }
//     else
//     {
//         /* code */
//         printf("msg send success,type is %d,funcCode[%d]\n",wtQueueMsg.type,wtQueueMsg.wontecMsg.funcCode);
//     }

// }
#define CRC_DATA_FILE "crc_data.txt"

int main(int argc, char * argv[])
{
    FILE * fp = NULL;
    wontec_queue_msg wtQueueMsg;
    memset(&wtQueueMsg,0,sizeof(wontec_queue_msg));

    if(argc<2)
    {
        fp = fopen(CRC_DATA_FILE,"r");       

    }
    else
    {
        fp = fopen(argv[1],"r");
    }

    if(fp!=NULL)
    {
        char StrLine[256];
        char * tmpPtr = NULL;

        char dataRead[1024];
        memset(dataRead,0,1024*sizeof(char));
        int lenOut = 0;
        while(!feof(fp))
        {
            memset(StrLine,0,256);
            fgets(StrLine,256,fp);
            tmpPtr = StrLine;
            int lenAll = strlen(StrLine);
            int lenLeft = lenAll;
            
            int tempData = 0;
            while(lenLeft>=3)
            {
               sscanf(tmpPtr,"%02x",&tempData);
               dataRead[lenOut++] = (char)tempData; 

               lenLeft-=3;
               tmpPtr +=3;           

            }     

        }

        printf("data from file:\n");
        int i=0;
        for(i=0;i<lenOut;i++)
        {
            printf("0x%02x,",dataRead[i]);
            if(i%5==4)
            {
                printf("\n");
            }
        }

        if(i%5!=0)
        {
           printf("\n");
        }

        unsigned short crcValue = cal_crc((unsigned char *)dataRead,lenOut);
        printf("crc result:0x%04x\n",crcValue);
    }

}


